Field of the Invention
The present invention generally relates to initializing a redundant array of independent disks (RAID). In particular, the invention enables a RAID set to service requests immediately after the RAID set is described.
Description of the Related Art
Redundant arrays of independent disks, commonly referred to as RAID, must be initialized prior to use. A RAID set includes two or more data storage devices used to store data redundantly and increase data storage performance.
Conventionally, the initialization of a RAID set requires zeros to be written to each data storage location contained within each of the data storage devices in the RAID set. Today, each individual data storage device in a RAID set commonly contains many Terabytes of data. Since the process of writing zeros to a one Terabyte drive takes days, there is a large overhead associated with initializing a RAID set. Delays associated with waiting for RAID set initialization increases both direct and indirect costs of running a data center. Direct costs include the cost of space and power used during initialization. Indirect costs include not being able to use or lease data storage space on the RAID set when the RAID set is being initialized. Costs associated with initializing a RAID set would be reduced if the RAID set could act as an initialized RAID set immediately after it was described.
Examples of standard RAID levels include RAID 0, RAID 1, RAID 2, RAID 3, RAID 4, RAID 5, RAID 6, and RAID 10.
RAID 0 includes two or more data storage devices where each data storage device is written with the data evenly distributed across the data storage devices in equal sized chunks, without redundancy. These chunks of data are referred to as stripes. Each consecutive stripe is written to a different data storage device until all of the data storage devices contain a first stripe. After each data storage device has been written with a first stripe, a second set of stripes are written to the RAID set. This process is repeated until all data is written to the RAID set. RAID 0 is typically used when one wishes to increase the input/output performance of a data storage system.
RAID 1 is a mirror, wherein two or more data storage devices contain identical data. Essentially a second data storage device is a copy of a first data storage device. RAID 1 provides a simple form of data redundancy. RAID 2, like RAID 0, stripes data across a plurality of data storage devices. RAID 2, however, stripes at the bit level, not in larger chunks. RAID 2 also includes Hamming code error correction. RAID 3 combines data striping with parity, wherein parity data is stored on a dedicated data storage device. Parity allows the data to be reconstructed when a single data storage device fails using a simple XOR function. RAID 3 stripes data across the data storage devices at the byte level (8 bits).
RAID 4 uses data striping, and also uses a data storage device dedicated to storing parity data. RAID 4 stripes data at the block level. In most data storage devices today, data blocks, also known as logical blocks, contain 512 bytes. RAID 5 uses block level data striping combined with parity distributed across all of the data storage devices in the RAID set.
RAID 6 is similar to RAID 5, yet includes a second set of parity information distributed across the data storage devices in the RAID set. RAID 10 combines striping and mirroring, it is a combination of RAID 0 and RAID 1.